//从express导入几个对象
import { Request, Response, NextFunction } from 'express';

//导入数据service的数据库增删改查结果
import { getPosts, createPost, updataPost, deletePost } from './post.service';


// 内容列表接口
//到出这个函数,作为接口处理器
// 因为调用数据库的数据所以使用async
export const index = async (
  req: Request,
  res: Response,
  next: NextFunction
) => {
  // 测试异常处理是否返回异常信息
  //假设请求头的作者是tom就出发异常
  // if(req.headers.authorization !== 'tom'){
  //   // 不加return 会触发 处理器里其他的内容
  //   return next(new Error());
  //   // 在http工具中的header加一个参数 authorization 值随便定 不是tom就会触发异常处理
  // }

  //查询数据做异常处理
  try {
    // 加入导入数据
    // 因为调用数据库的数据所以使用await 等待执行结果
    const posts = await getPosts();
    // 将内容返回
    res.send(posts);
    // res.send('内容列表接口');
  } catch (error) {
    // 处理异常,交给异常处理器处理 defaultErrorHandler
    next(error);
  }
}
// http://localhost:3000/posts 访问接口

// 创建内容（增加）数据接口 store 存储
export const store = async (
  req: Request,
  res: Response,
  next: NextFunction
) => {
  // 结构传入数据
  // const { title, content } = req.body;
  // 如果有多个属性，要改动的不确定，可以直接获得一个对象，不管有几个属性直接传到sql去到set ?中
  const obj = req.body;
  try {
    // 这个data是用户发来的数据
    // const data = await createPost({ title, content });
    const data = await createPost(obj);
    // 响应
    res.status(201).send(data);
  } catch (error) {
    // 处理异常,交给异常处理器处理 defaultErrorHandler
    next(error);
  }
}

// 更新内容（修改）数据接口 update
export const update = async (
  req: Request,
  res: Response,
  next: NextFunction
) => {
  // 获取id
  const { postId } = req.params;
  // 获取数据
  // 获取数据用户传入如果是两个值，两个值会同时更新
  // const { title, content } = req.body;
  // 如果有多个属性，要改动的不确定，可以直接获得一个对象，不管有几个属性直接传到sql去到set ?中
  const obj = req.body;
  // 更新
  try {
    // 这个data是用户发来的数据  两个参数 传入的id         更新的标题和内容
    // const data = await updataPost(parseInt(postId,10),{ title, content });
    const data = await updataPost(parseInt(postId, 10), obj);
    // 响应
    res.send(data);
  } catch (error) {
    // 处理异常,交给异常处理器处理 defaultErrorHandler
    next(error);
  }
}

// 删除内容数据接口 update
export const destroy = async (
  req: Request,
  res: Response,
  next: NextFunction
) => {
  // 获取id
  const { postId } = req.params;

  // 删除
  try {
    // 这个data是用户发来的数据   传入要删除的的id        
    const data = await deletePost(parseInt(postId, 10));
    // 响应
    res.send(data);
  } catch (error) {
    // 处理异常,交给异常处理器处理 defaultErrorHandler
    next(error);
  }
}

//更新路由post.router.ts